package chai.ning.classes;

/**
 * 1、理解 Class 类的作用
 *    Class : 表示 类型对应的类（将各种类型本身看作是实例，则这些实例对应的类型就是Class类型）
 *   	Monkey : 孙悟空 、六耳猕猴 、者行孙 、行者孙 、孙行者 、吉吉国王 、毛毛
 *	 	Bear : 熊大、熊二 、 翠花 、酸菜
 *	 	Bull : 牛魔王 、 红孩儿 、 大角牛
 *		int : 100 、200 、300
 * 2、了解如何获得 Class 实例
 * 2.1、任意类型都可以通过 .class 来获取该类型对应的 Class实例
 * 2.2、任意类的一个实例都可以通过 getClass()方法来获取该实例对应类的Class实例
 */
public class ClassTest1 {

	public static void main(String[] args) {
		
		
		Class<?> c ; // 声明一个Class类型的变量用来保存某个Class实例的引用
		
		// 任意类型都可以通过 .class 来获取该类型对应的 Class实例
		c = Object.class ; // 引用变量 c 所指向的对象(实例) 就表示 Object类
		System.out.println( c );
		
		c = String.class ; // 引用变量 c 所指向的对象(实例) 就表示 String类
		System.out.println( c );
		
		c = int.class ; // 基本类型可以
		System.out.println( c );
		
		c = int[].class ; // 数组类型也可以
		System.out.println( c );
		
		c = byte[][].class ;
		System.out.println( c );
		
		c = void.class ; // void类型也可以
		System.out.println( c );
		
		System.out.println( "- - - - - - - - -" );
		
		String s = new String( "abc" ) ; // 引用变量 s 所指向的对象(实例) 是  String 类型
		c = s.getClass(); // 通过引用变量s找到对应的对象后，调用 getClass方法获得该对象对应的类型(String)对应Class实例
		System.out.println( c );
		
		String x = new String( "xyz" ) ; // 引用变量 x 所指向的对象(实例) 是  String 类型
		c = x.getClass(); // 通过引用变量x找到对应的对象后，调用 getClass方法获得该对象对应的类型(String)对应Class实例
		System.out.println( c );
		
		Object o = new Object(); // 引用变量 o 所指向的对象(实例) 是  Object 类型
		c = o.getClass(); // 通过引用变量o找到对应的对象后，调用 getClass方法获得该对象对应的类型(Object)对应Class实例
		System.out.println( c );
		
		Object b = new Object(); // 引用变量 b 所指向的对象(实例) 是  Object 类型
		c = b.getClass(); // 通过引用变量b找到对应的对象后，调用 getClass方法获得该对象对应的类型(Object)对应Class实例
		System.out.println( c );
		
		int[] p = { 1 , 3 , 5 , 7 , 9 }; // 引用变量 p 所指向的对象(实例) 是  int[] 类型
		c = p.getClass(); // 通过引用变量p找到对应的对象后，调用 getClass方法获得该对象对应的类型(int[])对应Class实例
		System.out.println( c );
		
		int[] q = { 2 , 4 , 6 , 8 , 10 } ;  // 引用变量 q 所指向的对象(实例) 是  int[] 类型
		c = q.getClass(); // 通过引用变量q找到对应的对象后，调用 getClass方法获得该对象对应的类型(int[])对应Class实例
		System.out.println( c );
		
	}

}
